<?php

/**
 * 
 */
 
class note extends Plugin
{
    //    internal variables
    
    //    Constructor
    function __construct ( ){
        parent::__construct();
        $this->scope[]   = 'Item_supprimer';   
        $this->scope[]   = 'Item_returnArray';
        $this->scope[]   = 'template';
        $this->droits    = 'VISITOR';
        $this->nom       = 'Mettre une note';
        $this->className = 'note';
        $this->desc      = 'Permet d\'ajouter des notes sur chaque item.';
        $this->uniId     = 'NoteUNIID';
        $this->version   = '0.1';
        //--- anti bot
    
        $this->content   = 
            '<h2>Comment l\'utiliser ?</h2>            
            <script type="text/javascript">Element.hide("leFormPluginNoteUNIID");</script>
            <p>Cliquez sur un item, puis sur l\'étoile voulue.</p>
            <p>
                <input class="bAnnuler" value="Fermer" type="button" />
            </p>';
        
        
    }    
    
    public function Item_supprimer($item)
    {
        $sql = SQL::GetInstance();
        $req = 'DELETE FROM '.$sql->getPrefix().'note WHERE idItem="'.$item->getIdItem().'"';
        $sql->executer($req);
    }
    
    private function demiRound($s)
    {
        // arrondis à 0,5 près supérieur
        $s = (empty($s))      ? 0   :(float)$s;
        $s = ($s>0 && $s<0.5) ? 0.5 : $s;
        $s = ($s>0.5 && $s<1) ? 1   : $s;
        $s = ($s>1 && $s<1.5) ? 1.5 : $s;
        $s = ($s>1.5 && $s<2) ? 2   : $s;
        $s = ($s>2 && $s<2.5) ? 2.5 : $s;
        $s = ($s>2.5 && $s<3) ? 3   : $s;
        $s = ($s>3 && $s<3.5) ? 3.5 : $s;
        $s = ($s>3.5 && $s<4) ? 4   : $s;
        $s = ($s>4 && $s<4.5) ? 4.5 : $s;
        $s = ($s>4.5 && $s<5) ? 5   : $s;
        return $s;
    }
    
    public function Item_returnArray($item)
    {
        $sql = SQL::GetInstance();
        $requete = 'SELECT COUNT(*) as nb, AVG(note) as m FROM '.$sql->getPrefix().'note WHERE idItem = "'.$item->getIdItem().'"';
        $r = $sql->doRequeteLigne($requete);
        $t = $r['nb'];
        $s = $this->demiRound($r['m']);
        
        $item->setMore(array(
            'NB_NOTE_ITEM'   => $t,
            'NOTE_ITEM'      => $s,
            'LIEN_NOTE_ITEM' => 'PLUGIN=note&amp;idItem='.$item->getIdItem()));
    }

    public function action(){
        if(parent::action() == 'nop') return 'nop';
        if(!$this->ok()) return 'n_err1';
        
        if(isset($_POST['idItem']) && isset($_POST['noteValue']))
        {
            global $LOGIN, $visiteur;
            if($LOGIN == $visiteur)
            {
                echo 'err:Erreur, vous n\'êtes pas identifié.';
                exit;
            }
            
            $note = (int)$_POST['noteValue'];
            if($note < 0) $note = 0;
            if($note > 5) $note = 5;
            $idN  = (int)$_POST['idItem'];
            if(!empty($note))
            {
                try
                {
                    $sql     = SQL::GetInstance();
                    $requete = 'INSERT INTO '.$sql->getPrefix().'note(idItem,note,login) VALUES('.$idN.', '.$note.', \''.$LOGIN.'\')';
                    if(!$sql->executer($requete)) throw new ListerException('Doublon');
                    
                    $requete = 'SELECT AVG(note) as m FROM '.$sql->getPrefix().'note WHERE idItem = "'.$idN.'"';
                    $r = $sql->doRequeteLigne($requete);
                    $s = $this->demiRound($r['m']);
     
                    echo 'ok:'.$s; 
                    exit;
                }
                catch(ListerException $e)
                {
                    echo 'err:Erreur, vous avez sans doute déjà voté.'; 
                    exit;
                }
            }
        }
    }

}


?>
